﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Infrastructure.CrossCutting.Logging;
using Cesave.Infrastructure.CrossCutting.IoC;
using System.ServiceModel;
using Cesave.DistributedServices.Core.ErrorHandlers;
using Cesave.Domain.PermisosModule.Contracts.CultivosFechas;

namespace Cesave.DistributedServices.PermisosModule
{
    public partial class PermisosModuleService
        : IPermisosModuleService
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fecha"></param>
        public void AddCultivosFecha(Domain.PermisosModule.Entities.CultivosFecha fecha)
        {
            try
            {
                ICultivosFechaService cultivosFechaService = IoCFactory.Resolve<ICultivosFechaService>();
                cultivosFechaService.AddCultivosFecha(fecha);    
            }
            catch (Exception ex)
            {
                ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
                traceManager.TraceError(ex.Message);

                throw new FaultException<ServiceError>(ServiceError.Factory(ex.Message));
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fecha"></param>
        public void ChangeCultivosFecha(Domain.PermisosModule.Entities.CultivosFecha fecha)
        {
            try
            {
                ICultivosFechaService cultivosFechaService = IoCFactory.Resolve<ICultivosFechaService>();
                cultivosFechaService.ChangeCultivosFecha(fecha);
            }
            catch (Exception ex)
            {
                ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
                traceManager.TraceError(ex.Message);

                throw new FaultException<ServiceError>(ServiceError.Factory(ex.Message));
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cultivoGuid"></param>
        /// <param name="cicloGuid"></param>
        /// <param name="juntaGuid"></param>
        /// <returns></returns>
        public List<Domain.PermisosModule.Entities.CultivosFecha> FindCultivosFechasByCultivoAndCicloAndJunta(Guid cultivoGuid, Guid cicloGuid, Guid juntaGuid)
        {
            try
            {
                ICultivosFechaService cultivosFechaService = IoCFactory.Resolve<ICultivosFechaService>();
                return cultivosFechaService.FindCultivosFechasByCultivoAndCicloAndJunta(
                    cultivoGuid,
                    cicloGuid,
                    juntaGuid
                );
            }
            catch (Exception ex)
            {
                ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
                traceManager.TraceError(ex.Message);

                throw new FaultException<ServiceError>(ServiceError.Factory(ex.Message));
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cultivoGuid"></param>
        /// <param name="cicloGuid"></param>
        /// <param name="juntaGuid"></param>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <returns></returns>
        public List<Domain.PermisosModule.Entities.CultivosFecha> FindCultivosFechasForExpedicion(Guid cultivoGuid, Guid cicloGuid, Guid juntaGuid, DateTime fromDate, DateTime toDate)
        {
            try
            {
                ICultivosFechaService cultivosFechaService = IoCFactory.Resolve<ICultivosFechaService>();
                return cultivosFechaService.FindCultivosFechasForExpedicion(
                    cultivoGuid,
                    cicloGuid,
                    juntaGuid,
                    fromDate,
                    toDate
                );
            }
            catch (Exception ex)
            {
                ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
                traceManager.TraceError(ex.Message);

                throw new FaultException<ServiceError>(ServiceError.Factory(ex.Message));
            }
        }
    }
}
